package product;

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class TempCheckin extends JFrame {

	private JPanel contentPane;
	private JLabel label;
	private JTextField search;
	private JButton checkBtn;
	private JButton leaveBtn;
	private JRadioButton button1;
	private JRadioButton button2;
	private JRadioButton button3;
	private JRadioButton button4;

	ButtonGroup group = new ButtonGroup(); // 버튼 그룹화
	HashMap<String, TempData> map; // TempInput으로부터 받아올 데이터를 저장할 맵.
	String key = null;
	String filename = "noname";
	private JButton leaveBtn2;
	private JButton btnNewButton;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				try {
					TempCheckin frame = new TempCheckin();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public TempCheckin() {
		setTitle("\uCD9C\uD1F4\uADFC \uBC0F \uD734\uAC00");
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		contentPane.add(getLabel());
		contentPane.add(getSearch());
		contentPane.add(getCheckBtn());
		contentPane.add(getLeaveBtn());
		contentPane.add(getButton1());
		contentPane.add(getButton2());
		contentPane.add(getButton3());
		contentPane.add(getButton4());


		group.add(button1);
		group.add(button2);
		group.add(button3);
		group.add(button4);
		contentPane.add(getLeaveBtn2());
		contentPane.add(getBtnNewButton());



	}

	public void setD(HashMap<String, TempData> map){
		this.map = map;
	}

	private JLabel getLabel() {
		if (label == null) {
			label = new JLabel("\uC0AC\uBC88");
			label.setFont(new Font("굴림", Font.PLAIN, 11));
			label.setBounds(77, 27, 57, 15);
		}
		return label;
	}
	private JTextField getSearch() {
		if (search == null) {
			search = new JTextField();
			search.setBounds(131, 24, 218, 21);
			search.setColumns(10);
		}
		return search;
	}
	private JButton getCheckBtn() {
		if (checkBtn == null) {
			checkBtn = new JButton("출근");
			checkBtn.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					if(!search.getText().equals("")){
						// 일단, 사번 텍스트필드에 입력했는지 검사하고 
						Set<String> st = map.keySet(); // 맵에 있는 키를 Set으로 반환합니다.
						Iterator<String> it = st.iterator();

						boolean flag = true;

						if(it.hasNext()){
							// 맵에 데이터가 있는지 없는지 검사
							while(it.hasNext()){
								key = it.next();

								if(key.equals(search.getText())){
									// 입력한 사번과 동일한 데이터가 존재하면.
									flag = false; 

									Date date = new Date(); // 출근할 때의 날짜.
									
									// 심플 데이터 포맷
									SimpleDateFormat sb = new SimpleDateFormat("yy-MM-dd");	
									String date_str = sb.format(date); // 위 포맷에 맞게 날짜 데이터를 스트링으로 변환 
									
									map.get(key).date.add(date_str); // 출근 벡터에 데이터를 저장해줘요.

									search.setText(key + "님 "+ date_str + "에 출근"); // 출근한다고 표시
									break; // 볼일 끝났으니깐 반복문 바이
								}
							}

							if(flag){
								JOptionPane.showMessageDialog(null, "귀하의 데이터가 존재하지 않습니다.", "Error",
										JOptionPane.ERROR_MESSAGE);
							}
						}
						else{
							JOptionPane.showMessageDialog(null, "저장된 데이터가 없습니다.", "Error",
									JOptionPane.ERROR_MESSAGE);
						}

					}
					else{
						JOptionPane.showMessageDialog(null, "사번을 입력해주세요.", "Error",
								JOptionPane.ERROR_MESSAGE);
					}

				}
			});
			checkBtn.setFont(new Font("굴림", Font.PLAIN, 11));
			checkBtn.setBounds(77, 67, 127, 23);
		}
		return checkBtn;
	}
	private JButton getLeaveBtn() {
		if (leaveBtn == null) {
			leaveBtn = new JButton("휴가 신청");
			leaveBtn.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {

					if(!search.getText().equals("")){
						// 일단, 사번 텍스트필드에 입력했는지 검사하고 
						Set<String> st = map.keySet(); // 맵에 있는 키를 Set으로 반환합니다.
						Iterator<String> it = st.iterator();

						boolean flag = true;

						if(it.hasNext()){
							// 맵에 데이터가 있는지 없는지 검사
							while(it.hasNext()){
								key = it.next();

								if(key.equals(search.getText())){
									// 입력한 사번과 동일한 데이터가 존재하면.
									flag = false; 
									
									search.setText(map.get(key).getName()+"님 휴가를 선택하세요.");
									checkBtn.setEnabled(false); // 휴가를 신청하면, 출근을 못하죠

									// 라디오버튼을 활성화
									button1.setEnabled(true);
									button2.setEnabled(true);
									button3.setEnabled(true);
									button4.setEnabled(true);

									// 휴가 신청 버튼 활성화
									leaveBtn2.setVisible(true);
									break; // 볼이 끝났으니깐 반복문 바이 
								}
							}

							if(flag){
								JOptionPane.showMessageDialog(null, "귀하의 데이터가 존재하지 않습니다.", "Error",
										JOptionPane.ERROR_MESSAGE);
							}
						}
						else{
							JOptionPane.showMessageDialog(null, "저장된 데이터가 없습니다.", "Error",
									JOptionPane.ERROR_MESSAGE);
						}

					}
					else{
						JOptionPane.showMessageDialog(null, "사번을 입력해주세요.", "Error",
								JOptionPane.ERROR_MESSAGE);
					}



					/*checkBtn.setEnabled(false); // 휴가를 신청하면, 출근을 못하죠

					// 라디오버튼을 활성화
					button1.setEnabled(true);
					button2.setEnabled(true);
					button3.setEnabled(true);
					button4.setEnabled(true);

					// 휴가 신청 버튼 활성화
					leaveBtn2.setVisible(true);*/
				}
			});
			leaveBtn.setFont(new Font("굴림", Font.PLAIN, 11));
			leaveBtn.setBounds(222, 67, 127, 23);
		}
		return leaveBtn;
	}
	private JRadioButton getButton1() {
		if (button1 == null) {
			button1 = new JRadioButton("\uB144\uCC28");
			button1.setEnabled(false);
			button1.setFont(new Font("굴림", Font.PLAIN, 11));
			button1.setBounds(77, 127, 65, 23);
		}
		return button1;
	}
	private JRadioButton getButton2() {
		if (button2 == null) {
			button2 = new JRadioButton("\uC6D4\uCC28");
			button2.setEnabled(false);
			button2.setFont(new Font("굴림", Font.PLAIN, 11));
			button2.setBounds(180, 127, 65, 23);
		}
		return button2;
	}
	private JRadioButton getButton3() {
		if (button3 == null) {
			button3 = new JRadioButton("\uC0DD\uB9AC");
			button3.setEnabled(false);
			button3.setFont(new Font("굴림", Font.PLAIN, 11));
			button3.setBounds(281, 127, 68, 23);
		}
		return button3;
	}
	private JRadioButton getButton4() {
		if (button4 == null) {
			button4 = new JRadioButton("\uBB34\uAE09");
			button4.setEnabled(false);
			button4.setFont(new Font("굴림", Font.PLAIN, 11));
			button4.setBounds(77, 161, 68, 23);
		}
		return button4;
	}
	private JButton getLeaveBtn2() {
		if (leaveBtn2 == null) {
			leaveBtn2 = new JButton("휴가낼게요");
			leaveBtn2.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					
					boolean flag = true; // 라디오 버튼을 선택했냐 안했냐 판단
					
					Enumeration<AbstractButton> enums = group.getElements();
					
					while(enums.hasMoreElements()){
						AbstractButton ab = enums.nextElement();
						JRadioButton jb = (JRadioButton)ab;
						
						if(jb.isSelected()){
							flag = false;
							//System.out.println(jb.getText());
							//System.out.println(key);
							//map.get(key).setLeave(jb.getText());
							search.setText(map.get(key).getLeave()+"를 신청하였습니다.");
							checkBtn.setEnabled(true);
							break; // 볼일 끝났으니깐 반복문 바이
						}
					}
					
					if(flag){
						JOptionPane.showMessageDialog(null, "휴가를 선택하세요.", "Error",
								JOptionPane.ERROR_MESSAGE);
					}
				

				}
			});
			leaveBtn2.setVisible(false);
			leaveBtn2.setFont(new Font("굴림", Font.PLAIN, 11));
			leaveBtn2.setBounds(252, 191, 97, 23);
		}
		return leaveBtn2;
	}
	private JButton getBtnNewButton() {
		if (btnNewButton == null) {
			btnNewButton = new JButton("Save File");
			btnNewButton.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					// 맵에 있는 데이터들 모두 저장
					try {
						save();
					} catch (Exception e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			});
			btnNewButton.setFont(new Font("굴림", Font.PLAIN, 11));
			btnNewButton.setBounds(252, 217, 97, 23);
		}
		return btnNewButton;
	}
	
	public void save() throws Exception{

		if(filename.equals("noname")){ // 파일명이 noname이면, 새로운 이름으로 저장한다.
			save_as();
		}

		FileOutputStream fw = new FileOutputStream(filename);
		ObjectOutputStream bw = new ObjectOutputStream(fw);

		bw.writeObject(map);
		
		search.setText("파일을 저장하였습니다.");

		bw.close();
		fw.close();
	}
	
	public void save_as() throws Exception {
		JFileChooser fc = new JFileChooser();
		int yn = fc.showSaveDialog(this);

		if(yn == JFileChooser.APPROVE_OPTION){
			File f = fc.getSelectedFile();
			filename = f.getPath(); // 파일명 지정
			save();
		}
	}
}
